package modelo.AlgoHero;

import java.util.ArrayList;
import java.util.Iterator;
import org.w3c.dom.*;


public class Compas implements Traducible {

	private ArrayList <Partitura> listaDePartituras;
	
	/**
	 * Constructor sin parametros
	 * @author Hernan G Gonzalez
	 */
	public Compas (){
		
		this.listaDePartituras = new ArrayList <Partitura> ();
	}
	
	/**
	 * Recibe un nodo, que seria el de compas y realiza la deserializacion de partituras
	 *  TODO completar
	 *  @autor santiago di Tada
	 */
	public void Deserialize(Element cancionNode){		
		  NodeList nodeList = cancionNode.getElementsByTagName("partitura");
		  if(nodeList != null && nodeList.getLength() > 0) {
			  for(int i = 0 ; i < nodeList.getLength();i++) 
			  {			 
				  Partitura partitura = new Partitura();	
				  //System.out.println("partitura "+i);	 	
				  partitura.Deserialize((Element)nodeList.item(i));
				  this.listaDePartituras.add(partitura);
						  
			  }
		  }				 
	}
	
	
	/**
	 * Metodo utilizado para traducir el compas actual.
	 * Devuelve una instancia de la clase CompasTraducido
	 */
	public ObjetoTraducido traducir() {

		PartituraTraducida partituraTraducida;
		CompasTraducido compasTraducido = new CompasTraducido();
		Iterator <Partitura> i = this.listaDePartituras.iterator();
		
		while (i.hasNext()){
			
			Partitura partitura;
			
			partitura = i.next();
			
			partituraTraducida = (PartituraTraducida)partitura.traducir();
			
			compasTraducido.add(partituraTraducida);

		}
		
		return compasTraducido;
	}
	
	/**
	 * Metodo utilizado para agregar una partitura al compas.
	 * @param partitura
	 */
	public void add(Partitura partitura){
		
		this.listaDePartituras.add(partitura);
	}

	/**
	 * Metodo utilizado para saber si hay partituras 
	 * @author santiago di Tada
	 */
	public boolean isEmpty(){
		return this.listaDePartituras.isEmpty();
	}
	
}
